<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>值引用</title>
</head>

<body>
    <script>
        var a = 'ot';
        a.age = 18;
        /* 
        基本类型:String,Number,Boolean;
        每次如上面a.age=18可以分解成：
        第一步：先创造一个实例
        var s1=new String('ot')
        第二步：做具体的操作
        s1.age=18
        第三步：销毁这个实例
        s1=null

        alert(a.age) 可以分解成
        var s2=new String('ot')
        alert(s2.age)  所以这里值是undefined
        s2=null

        a.length=160 可以分解成
        var s3=new String('ot')
        s3.length=160
        s3=null

        alert(a.length) 可以分解成：
        var s4=new String('ot')
        alert(s4.length) //因为ot字符串长度就是2，所以得到的是2
        s4=null
        
         */
        alert(a.age);//undefined
        a.length = 160;
        alert(a.length);//2

        // 题：
        var a = 1;
        var obj = {
            b: 2
        };
        var fn = function () { };
        fn.c = 3;

        function test(x, y, z) {
            x = 4;
            y.b = 5;
            z.c = 6;
            return z;
        }
        test(a, obj, fn);
        // a还是1 obj是地址。改了都会改，所以是5。function也是一样，改了都会改，就算是方法test不return z 由于z.c=6 所以他的值还是会改变。因为在函数体里面已经更改了z.c了。一改全改。其实这个题目还是迷惑性大于难度
        alert(a + obj.b + fn.c);
    </script>
</body>

</html>